package dinucleotides;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;

@SuppressWarnings("serial")
public class IHM extends JFrame {

	private static final int NB_ALGO = Algo.values().length;
	private static final int HAUTEUR_TABLEAU = 16;
	private static final int LONGUEUR_TABLEAU = 390;
	
	private JButton[] jb_algo;
	private JButton jb_all, jb_folder;
	private CustomTableModel[] ctm;

	public IHM(String titre) {
		/** Titre **/
		super(titre);
		/** Événement **/
		ActionListener action = new Event(this);
		/** Barre de Menu **/
		creeBarreDeMenu(action);
		/** Interface **/
		creeInterface(action);
		/** Zone de notification **/
		menuContextuel();
		/** Fenêtre **/
		creeFenetre();
	}
	public final void creeBarreDeMenu(ActionListener action) {
		/** Création des éléments **/
		/** Paramétrage des éléments **/
		/** Action sur les éléments **/
		/** Montage des éléments **/
	}
	public final void creeInterface(ActionListener action) {
		ctm = new CustomTableModel[NB_ALGO];
		for (Algo a : Algo.values()) {
			ctm[a.getIdx()] = new CustomTableModel("Nb" + a.getNomFichier());
		}
		/** Création des éléments **/
		JLabel jl_projet = new JLabel("<html><h1 style='color:#4a86e8;'>Projet d'algorithme de recherche</h1><p>&nbsp;</p></html>",SwingConstants.CENTER);
		JPanel jp_centre = new JPanel(new BorderLayout());
			JPanel jp_grille = new JPanel(new GridLayout(4,1));
				JPanel[] jpAlgos = new JPanel[4];for (int i = 0; i < NB_ALGO; i++) {jpAlgos[i] = new JPanel(new BorderLayout());}
					jb_algo = new JButton[NB_ALGO];for (Algo a : Algo.values()) {jb_algo[a.getIdx()] = new JButton(a.getNom());}
					JTable[] jtRes = new JTable[NB_ALGO];for (int i = 0; i < NB_ALGO; i++) { jtRes[i] = new JTable(ctm[i]); }
					JScrollPane[] jsRes = new JScrollPane[NB_ALGO];for (int i = 0; i < NB_ALGO; i++) { jsRes[i] = new JScrollPane(jtRes[i]); }
			JPanel jp_bottom = new JPanel(new BorderLayout());
				jb_all = new JButton("Tout générer");
				jb_folder = new JButton("Ouvrir le dossier des résultats");
		JLabel jl_authors = new JLabel("<html><p>&nbsp;</p><p style='font-style:italic;color:#9a60ff;'>Marie-Hélène Goddet et Damien Finck&nbsp;</p></html>",SwingConstants.RIGHT);
		/** Paramétrage des éléments **/
		for (int i = 0; i < NB_ALGO; i++) {
			jtRes[i].setPreferredScrollableViewportSize(new Dimension(LONGUEUR_TABLEAU, HAUTEUR_TABLEAU));
			jtRes[i].setFillsViewportHeight(true);
		}
		/** Action sur les éléments **/
		jb_all.addActionListener(action);
		for (int i = 0; i < NB_ALGO; i++) {
			jb_algo[i].addActionListener(action);
		}
		jb_folder.addActionListener(action);
		/** Montage des éléments **/
		this.add(jl_projet,BorderLayout.NORTH);
		this.add(jp_centre,BorderLayout.CENTER);
			jp_centre.add(jp_grille,BorderLayout.CENTER);
				for (int i = 0; i < NB_ALGO; i++) {
					jp_grille.add(jpAlgos[i],BorderLayout.CENTER);
						jpAlgos[i].add(jb_algo[i],BorderLayout.CENTER);
						jpAlgos[i].add(jsRes[i],BorderLayout.EAST);
				}
			jp_centre.add(jp_bottom,BorderLayout.SOUTH);
				jp_bottom.add(Box.createVerticalStrut(20),BorderLayout.NORTH);
				jp_bottom.add(jb_all,BorderLayout.CENTER);
				jp_bottom.add(jb_folder,BorderLayout.EAST);
		this.add(jl_authors,BorderLayout.SOUTH);
	}
	public final void menuContextuel() {
		/** Création des éléments **/
		/** Paramétrage des éléments **/
		/** Action sur les éléments **/
		/** Montage des éléments **/
	}
	public final void creeFenetre() {
		/* Événement */
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Action de fermeture
		// this.addWindowListener(window); // Listener sur la fenêtre

		/* Design de la fenêtre */
		this.setUndecorated(false); // Affichage de la barre de titre dans la fenêtre
		// this.setLayout(new FlowLayout()); // Layout par défaut pour JFrame : BorderLayout
		// this.setIconImage(Resources.getImage("images/icon.png",Exemple.class)); // Image dans la barre des tâches

		/* Dimension (soit pack() soit setSize(x,y)) */
		this.pack(); // Auto-dimensionner
		// this.setSize(500,200); //Dimensionner la fenêtre

		/* Position */
		this.setLocationRelativeTo(null); // Positionner la fenêtre
		this.setResizable(false); // Redimensionnement de la fenêtre
		// this.setExtendedState(MAXIMIZED_BOTH); // Mettre en mode taille écran

		/* Visibilité de la fenêtre */
		this.setAlwaysOnTop(false); // Toujours au premier plan
		this.setVisible(true); // Rendre la fenêtre visible
	}

	public JButton getJbAlgo(int index) {
		return jb_algo[index];
	}
	public JButton getJbAll() {
		return jb_all;
	}
	public JButton getJbFolder() {
		return jb_folder;
	}
	public void setJbAll(JButton jb_all) {
		this.jb_all = jb_all;
	}
	public CustomTableModel getCtm(int index) {
		return ctm[index];
	}
}